package ikelib;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.TreeSet;
/**
 * メジアンを計算するクラス
 *  FilterPipeから派生している。
 * 　
 * @author ikechan
 *
 */
public class Median extends FilterPipe {
	
	/**
	 * 
	 * @param w
	 */
	public Median(int w){
		super(w);
	}
	@Override
	public double calcFilter(LinkedList<Double> ll){
		
		TreeSet<Double> ts = new TreeSet<Double>();
		// ソートするため
		Iterator<Double> ite = ll.iterator();
		while(ite.hasNext()){
			double d = ite.next();
			ts.add(d);
		}
		
		int len = ts.size();
		double ret = 0.0;
		Double[] data = ts.toArray(new Double[1]);
		if(len==0){
		}
		else if(len==1){
			ret = ts.first();
		}
		else if(len % 2 == 0){ // even
			double d1 = data[len/2];
			double d2 = data[len/2-1];
			ret = (d1+d2)/2.0;
		}
		else{ // odd
			ret = data[len/2];
		}
		return ret;
	}
}
